package gdf

import (
	"fmt"
	"gitee.com/liumou_site/logger"
	"github.com/shirou/gopsutil/mem"
)

// IsEnoughMem 检查系统是否有足够的内存来创建指定大小的缓存区。
// 参数:
//
//	size - 拟创建缓存区的大小，单位为字节。
//	free - 创建缓存区所需的额外自由内存大小，单位为字节。
//
// 返回值:
//
//	如果系统有足够的内存来创建缓存区，则返回true；否则返回false。
func IsEnoughMem(size, free int64) bool {
	// 获取内存信息
	vMem, err := mem.VirtualMemory()
	if err != nil {
		logger.Error(fmt.Sprintf("获取内存信息失败：%v", err))
		return false
	}

	// 将可用内存大小转换为MB单位
	f := vMem.Available / 1024 / 1024

	// 判断是否有足够的内存来创建缓存区
	if f < uint64(size) {
		return false
	}

	// 检查剩余内存是否足够创建缓存区
	if uint64(size)-f < uint64(free) {
		logger.Warn(fmt.Sprintf("剩余内存不够创建缓存区，剩余内存：%v MB", free))
		return false
	}

	// 如果所有检查都通过，则表示有足够的内存
	return true
}
